// ===========================================================================
// OgreKinectApp.h : Header file for OgreKinectApp
// ---------------------------------------------------------------------------
// Copyright (C) 2011 by Kevin Fisher
// ---------------------------------------------------------------------------
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//-----------------------------------------------------------------------------
// Author: Kevin Fisher <fisher.kevin.g -at- gmail.com> 
// Date:   Sat Aug 13 2011 17:42 EST
// ============================================================================

#ifndef OGREKINECTAPP_H_
#define OGREKINECTAPP_H_

// ============================================================================ 

#include "BaseApplication.h"
#include "KinectDevice.h"

// ============================================================================ 

/// <summary>
/// Top-Level Object for the application (ie. Holds all the pieces).
/// </summary>
class OgreKinectApp
	: public BaseApplication
	, public KinectDevice
{
public:
	OgreKinectApp(freenect_context *ctx, int index);
	virtual ~OgreKinectApp(void);

	static const std::string colorName;
	static const std::string depthName;
	static const std::string dualName;

protected:

	virtual bool setup(void);
	virtual void createScene(void);
	virtual bool frameRenderingQueued(const Ogre::FrameEvent &evt);

	virtual void createTextures(void);
	virtual void createMaterial(void);
	virtual void update(void);
	virtual void mergeBuffers(uint8_t buffer[], uint8_t color[], uint8_t depth[]);

	// OIS::KeyListener
	virtual bool keyPressed(const OIS::KeyEvent &key_evt);

	// Top-Left Screen (Video Feed)
	Ogre::SceneNode               *topLeftSceneNode;
	Ogre::Rectangle2D             *topLeftScreen;
	Ogre::TexturePtr              colorTexture;
	bool                          videoFullscreen;

	// Top-Right Screen (Depth Feed)
	Ogre::SceneNode               *topRightSceneNode;
	Ogre::Rectangle2D             *topRightScreen;
	Ogre::TexturePtr              depthTexture;
	bool                          depthFullscreen;

	// Bottom-Center Screen (Duel Feed)
	Ogre::SceneNode              *bottomSceneNode;
	Ogre::Rectangle2D            *bottomScreen;
	Ogre::TexturePtr             dualTexture;
	bool                         dualFullscreen;

	double angle;

private:
	
};

// ============================================================================ 

#endif // OGREKINECTAPP_H_ //

// ============================================================================ 

// ------------------------------[ END OF CODE ]-------------------------------

/// \file OgreKinectApp.h
/// \author Kevin Fisher <fisher.kevin.g -at- gmail.com> 
/// \date \c Created Sat Aug 13 2011 18:10 EST

